home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1996 July: Mac OS SDK / Dev.CD Jul 96 SDK / Dev.CD Jul 96 SDK1.toast / Development Kits (Disc 1) / OpenDoc / OpenDoc Development / Debugging Support / OpenDoc Source Code / Utilities / TempObj.cpp < prev    next >
Encoding:
C/C++ Source or Header  |  1996-04-22  |  6.9 KB  |  404 lines  |  [TEXT/MPS ]

  1. /*
  2.     File:        TempObj.cpp
  3.  
  4.     Contains:    Template utilities for exception-safe temporary object references
  5.  
  6.     Owned by:    Jens Alfke
  7.  
  8.     Copyright:    © 1995 by Apple Computer, Inc., all rights reserved.
  9.  
  10. */
  11.  
  12.  
  13. #ifndef _TEMPOBJ_
  14. #include "TempObj.h"
  15. #endif
  16.  
  17. #ifndef SOM_ODRefCntObject_xh
  18. #include <RefCtObj.xh>
  19. #endif
  20.  
  21. #ifndef SOM_ODExtension_xh
  22. #include <Extensn.xh>
  23. #endif
  24.  
  25. #ifndef SOM_ODSettingsExtension_xh
  26. #include <Settings.xh>
  27. #endif
  28.  
  29. #ifndef SOM_ODFrame_xh
  30. #include <Frame.xh>
  31. #endif
  32.  
  33. #ifndef SOM_ODShape_xh
  34. #include <Shape.xh>
  35. #endif
  36.  
  37. #ifndef SOM_ODTransform_xh
  38. #include <Trnsform.xh>
  39. #endif
  40.  
  41. #ifndef SOM_ODStorageUnit_xh
  42. #include <StorageU.xh>
  43. #endif
  44.  
  45. #ifndef SOM_ODPart_xh
  46. #include "Part.xh"
  47. #endif
  48.  
  49. #ifndef SOM_ODDraft_xh
  50. #include <Draft.xh>
  51. #endif
  52.  
  53. #ifndef SOM_ODDocument_xh
  54. #include <Document.xh>
  55. #endif
  56.  
  57.  
  58. #ifndef SOM_ODDocument_xh
  59. #include <Document.xh>
  60. #endif
  61.  
  62. #ifndef SOM_ODLink_xh
  63. #include <Link.xh>
  64. #endif
  65.  
  66. #ifndef SOM_ODLinkSource_xh
  67. #include <LinkSrc.xh>
  68. #endif
  69.  
  70. #ifndef SOM_ODContainer_xh
  71. #include <ODCtr.xh>
  72. #endif
  73.  
  74. #ifndef SOM_ODSession_xh
  75. #include <ODSessn.xh>
  76. #endif
  77.  
  78. #ifndef SOM_ODMenuBar_xh
  79. #include <MenuBar.xh>
  80. #endif
  81.  
  82. #ifndef SOM_ODStorageUnitView_xh
  83. #include <SUView.xh>
  84. #endif
  85.  
  86. #ifndef _ODDEBUG_
  87. #include "ODDebug.h"
  88. #endif
  89.  
  90. #ifndef __APPLEEVENTS__
  91. #include <AppleEvents.h>
  92. #endif
  93.  
  94. #ifndef _BARRAY_
  95. #include <BArray.h>
  96. #endif
  97.  
  98. #ifndef _ITEXT_
  99. #include "IText.h"
  100. #endif
  101.  
  102. #ifndef _ODMEMORY_
  103. #include "ODMemory.h"
  104. #endif
  105.  
  106. #ifndef _PLFMFILE_
  107. #include "PlfmFile.h"
  108. #endif
  109.  
  110.  
  111. #ifndef _USE_TEMPLATES_
  112.  
  113.     #ifdef __MWERKS__
  114.     #pragma push
  115.     #pragma once off
  116.     #endif
  117.  
  118.     // Define the non-inline methods of the various template classes:
  119.  
  120.     #define _TMPL_IMPL_
  121.     
  122.     #define _T_        ODObject
  123.     #define _C_        TempODObject
  124.     #include "TempObj.th"
  125.     #define _T_        ODSession
  126.     #define _C_        TempODSession
  127.     #include "TempObj.th"
  128.     #define _T_        ODTypeList
  129.     #define _C_        TempODTypeList
  130.     #include "TempObj.th"
  131.     #define _T_        ODStorageUnitView
  132.     #define _C_        TempODStorageUnitView
  133.     #include "TempObj.th"
  134.     
  135.     #define _T_        ODRefCntObject
  136.     #define _C_        TempODRefCntObject
  137.     #include "TempRef.th"
  138.     #define _T_        ODWindow
  139.     #define _C_        TempODWindow
  140.     #include "TempRef.th"
  141.     #define _T_        ODFrame
  142.     #define _C_        TempODFrame
  143.     #include "TempRef.th"
  144.     #define _T_        ODPart
  145.     #define _C_        TempODPart
  146.     #include "TempRef.th"
  147.     #define _T_        ODShape
  148.     #define _C_        TempODShape
  149.     #include "TempRef.th"
  150.     #define _T_        ODTransform
  151.     #define _C_        TempODTransform
  152.     #include "TempRef.th"
  153.     #define _T_        ODStorageUnit
  154.     #define _C_        TempODStorageUnit
  155.     #include "TempRef.th"
  156.  
  157.     #define _T_        ODDraft
  158.     #define _C_        TempODDraft
  159.     #include "TempRef.th"
  160.     #define _T_        ODDocument
  161.     #define _C_        TempODDocument
  162.     #include "TempRef.th"
  163.     #define _T_        ODContainer
  164.     #define _C_        TempODContainer
  165.     #include "TempRef.th"
  166.     #define _T_        ODLink
  167.     #define _C_        TempODLink
  168.     #include "TempRef.th"
  169.     #define _T_        ODLinkSource
  170.     #define _C_        TempODLinkSource
  171.     #include "TempRef.th"
  172.     #define _T_        ODMenuBar
  173.     #define _C_        TempODMenuBar
  174.     #include "TempRef.th"
  175.  
  176. /*    #define _T_        ODExtension
  177.     #define _C_        TempODExtension
  178.     #include "TempRef.th"
  179.     #define _T_        ODSettingsExtension
  180.     #define _C_        TempODSettingsExtension
  181.     #include "TempRef.th"
  182. */
  183.  
  184.     #undef _TMPL_IMPL_
  185.  
  186.     #ifdef __MWERKS__
  187.     #pragma pop
  188.     #endif
  189.  
  190. #endif /*_USE_TEMPLATES_*/
  191.  
  192. TempODPtr::TempODPtr( ) : fBlock(kODNULL)
  193. {
  194. }
  195.  
  196. TempODPtr::TempODPtr( void *block ) : fBlock(block)
  197. {
  198. }
  199.  
  200. TempODPtr::~TempODPtr( )
  201. {
  202.     delete fBlock;
  203.     fBlock = kODNULL;
  204. }
  205.  
  206. BaseTempObj::BaseTempObj( )
  207. {
  208.     fObj = kODNULL;
  209. }
  210.  
  211. BaseTempObj::~BaseTempObj( )
  212. {
  213.     delete fObj;
  214.     fObj = kODNULL;
  215. }
  216.  
  217. BaseTempRef::BaseTempRef( )
  218. {
  219.     fObj = kODNULL;
  220. }
  221.  
  222. void
  223. BaseTempRef::Release( )
  224. {
  225.     if( fObj ) {
  226.         ASSERT_IS_A(fObj,ODRefCntObject);
  227.         fObj->Release(somGetGlobalEnvironment());
  228.         fObj = kODNULL;
  229.     }
  230. }
  231.  
  232. BaseTempRef::~BaseTempRef( )
  233. {
  234.     if( fObj ) {
  235.         ASSERT_IS_A(fObj,ODRefCntObject);
  236.         fObj->Release(somGetGlobalEnvironment());
  237.         fObj = kODNULL;
  238.     }
  239. }
  240.  
  241. //===========================================================================
  242. //    Temp strings.
  243. //===========================================================================
  244.  
  245. TempODString::TempODString( char* s ) : fStr(s)
  246. {
  247. }
  248.  
  249. TempODString::~TempODString( )
  250. {
  251.     char* s = fStr;
  252.     fStr = kODNULL;
  253.     delete s;
  254. }
  255.  
  256. //===========================================================================
  257. //    Temp handles.
  258. //===========================================================================
  259.  
  260.  
  261. TempODHandle::TempODHandle( ODHandle h ) : fHandle(h)
  262. {
  263. }
  264.  
  265. TempODHandle::~TempODHandle( )
  266. {
  267.     ODHandle h = fHandle;
  268.     fHandle = kODNULL;
  269.     if ( h )
  270.         ODDisposeHandle( h );
  271. }
  272.  
  273. TempODHandleLock::TempODHandleLock( ODHandle h ) : fHandle(h)
  274. {
  275.     if ( h )
  276.         ODLockHandle( h );
  277. }
  278.  
  279. TempODHandleLock::~TempODHandleLock( )
  280. {
  281.     ODHandle h = fHandle;
  282.     fHandle = (ODHandle) kODNULL;
  283.     if ( h )
  284.         ODUnlockHandle( h );
  285. }
  286.  
  287. //===========================================================================
  288. //    Temp platform files.
  289. //===========================================================================
  290.  
  291.  
  292. TempPlatformFile::TempPlatformFile( PlatformFile* f ) : fFile(f)
  293. {
  294. }
  295.  
  296. TempPlatformFile::~TempPlatformFile( )
  297. {
  298.     PlatformFile* f = fFile;
  299.     fFile = kODNULL;
  300.     if ( f )
  301.         delete f;
  302. }
  303.  
  304. //===========================================================================
  305. //    Temp ODPasteAsResult.
  306. //===========================================================================
  307.  
  308.  
  309. TempODPasteAsResult::TempODPasteAsResult( ODPasteAsResult* r ) : fResult(r)
  310. {
  311. }
  312.  
  313. TempODPasteAsResult::~TempODPasteAsResult( )
  314. {
  315.     ODPasteAsResult* r = fResult;
  316.     fResult = kODNULL;
  317.     if ( r )
  318.     {
  319.         if  ( r->selectedKind ) 
  320.         {
  321.             delete r->selectedKind;
  322.             r->selectedKind = kODNULL;
  323.         }
  324.         if  ( r->translateKind ) 
  325.         {
  326.             delete r->translateKind;
  327.             r->translateKind = kODNULL;
  328.         }
  329.         if  ( r->editor ) 
  330.         {
  331.             delete r->editor;
  332.             r->editor = kODNULL;
  333.         }
  334.     }
  335. }
  336.  
  337. //===========================================================================
  338. //    Temp AEDescs.
  339. //===========================================================================
  340.  
  341.  
  342. TempAEDesc::TempAEDesc( AEDesc* d ) : fDesc(d)
  343. {
  344. }
  345.  
  346. TempAEDesc::~TempAEDesc( )
  347. {
  348.     AEDesc* d = fDesc;
  349.     fDesc = kODNULL;
  350.     if ( d )
  351.         AEDisposeDesc(d);
  352. }
  353.  
  354. //===========================================================================
  355. //    Temp ODIText.
  356. //===========================================================================
  357.  
  358. TempODIText::TempODIText( ODIText* t ) : fText(t)
  359. {
  360. }
  361.  
  362. TempODIText::~TempODIText( )
  363. {
  364.     ODIText* t = fText;
  365.     fText = kODNULL;
  366.     if ( t )
  367.         DisposeIText(t);
  368. }
  369.  
  370. //===========================================================================
  371. //    Temp byte arrays.
  372. //===========================================================================
  373.  
  374.  
  375. TempODByteArray::TempODByteArray( ODByteArray* ba ) : fBA(ba)
  376. {
  377. }
  378.  
  379. TempODByteArray::~TempODByteArray( )
  380. {
  381.     ODByteArray* ba = fBA;
  382.     fBA = kODNULL;
  383.     if ( ba )
  384.     {
  385.         if ( ba->_buffer )
  386.             ODDisposePtr(ba->_buffer);
  387.         ODDisposePtr(ba);
  388.     }
  389. }
  390.  
  391. TempODByteArrayStruct::TempODByteArrayStruct( )
  392. {
  393.     fBA._buffer = kODNULL;
  394. }
  395.  
  396. TempODByteArrayStruct::TempODByteArrayStruct( ODByteArray ba ) : fBA(ba)
  397. {
  398. }
  399.  
  400. TempODByteArrayStruct::~TempODByteArrayStruct( )
  401. {
  402.     ODDisposePtr(fBA._buffer);
  403. }
  404.